import router from './router'
import store from './store'
import NProgress from 'nprogress'
import 'nprogress/nprogress.css'
import { asyncRoutes } from '@/router/index.js'

// 白名单
const whiteList = ['LoginPage', '404Page']
// 前置路由守卫
router.beforeEach(async(to, from, next) => {
  // 进度条开始
  NProgress.start()
  const token = store.getters.token

  // 如果没有 token 并且 没有在白名单中
  if (!token && !whiteList.includes(to.name)) {
    // 重定向到登录页
    next({ name: 'LoginPage' }) // 注意：重定向后，就不会进入后置路由守卫了
    // 进度条结束
    NProgress.done()
  } else {
    // 如果在白名单中
    if (whiteList.includes(to.name)) {
      next() // 放行
    } else {
      // vuex 中没有用户 ID
      if (!store.getters.userId) {
        // 从 vueX 获取用户信息的 权限
        const { roles } = await store.dispatch('user/getUserInfo')
        console.log(roles, 'roles')
        // 把用户有的权限 从动态路由中 抽取出来
        const filterRoutes = asyncRoutes.filter(v => {
          return roles.menus.find(sv => '/' + sv === v.path)
        })
        console.log(filterRoutes, 'filterRoutes')
        store.commit('user/setRoutes', filterRoutes)
        // 加入到路由中
        router.addRoutes([...filterRoutes, { path: '*', redirect: '/404', hidden: true }])
        // 放行可以去有权限的页面
        next(to.path)
      } else {
        // 如果有用户信息 就放行
        next()
      }
    }
  }
})

// 后置路由守卫
router.afterEach(() => {
  // 进度条结束
  NProgress.done()
})
